#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/wait.h>
#include <stdint.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdbool.h>
#include <errno.h>
#include <string.h>
#include <signal.h>
#include <dlfcn.h>
#include <pthread.h>
#include <linux/fb.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <syslog.h>

int main(int argc, char const *argv[])
{
    // 1，测试匿名管道的写入缓冲区大小
    int fds[2];
    pipe(fds);

    // 设置非阻塞
    long status = fcntl(fds[1], F_GETFL);
    status |= O_NONBLOCK;
    fcntl(fds[1], F_SETFL, status);

    int cnt = 0;
    while(1)
    {
        int m = write(fds[1], "x", 1);
        if(m == -1 && errno == EAGAIN)
            break;
        else
            cnt++;
    }
    printf("匿名管道的写入缓冲区大小：%d\n", cnt);


    // 2，测试命名管道的写入缓冲区大小
    mkfifo("/tmp/fifo", 0666);
    int fd = open("/tmp/fifo", O_RDWR);

    // 设置非阻塞
    status = fcntl(fd, F_GETFL);
    status |= O_NONBLOCK;
    fcntl(fd, F_SETFL, status);

    cnt = 0;
    while(1)
    {
        int m = write(fd, "x", 1);
        if(m == -1)
            break;
        else
            cnt++;
    }
    printf("命名管道的写入缓冲区大小：%d\n", cnt);

    return 0;
}
